"""
Moonshot部分输出功能实现
支持Moonshot模型的部分输出续写功能
"""
from typing import Optional, Dict, Any, List
import logging

from ...capabilities.partial_mode import PartialModeCapability

logger = logging.getLogger("llm.moonshot.partial")

class MoonshotPartialMode(PartialModeCapability):
	"""Moonshot的部分输出实现"""
	
	def _initialize(self) -> None:
		"""初始化功能"""
		# Moonshot的部分输出需要通过特殊参数实现
		self.supported = True
		
	def is_supported(self) -> bool:
		"""
		检查当前配置是否支持部分输出
		
		Returns:
			是否支持部分输出
		"""
		return self.supported
	
	def continue_text(self, 
					prefix: str, 
					role: str = "assistant", 
					name: Optional[str] = None, 
					**kwargs) -> str:
		"""
		使用Moonshot API实现部分输出续写
		
		Args:
			prefix: 要续写的文本前缀
			role: 消息角色，默认为"assistant"
			name: 可选的角色名称
			**kwargs: 额外的提供商特定参数
			
		Returns:
			续写后的完整文本
		"""
		logger.debug(f"执行文本续写，前缀长度: {len(prefix)}")
		
		# 获取当前会话消息
		messages = self.provider.get_current_messages()
		
		# 准备部分模式消息
		partial_message = self.prepare_partial_message(prefix, role, name)
		
		# 处理消息列表
		processed_messages = messages.copy() if messages else []
		
		# 添加部分输出消息
		processed_messages.append(partial_message)
		
		# 调用API获取完成
		completion = self.provider._complete_internal(processed_messages, **kwargs)
		
		# 返回完整文本（前缀 + 补全部分）
		result = prefix + completion
		logger.debug(f"续写完成，最终文本长度: {len(result)}")
		
		return result
		
	def prepare_partial_message(self, 
							  prefix: str, 
							  role: str = "assistant", 
							  name: Optional[str] = None) -> Dict[str, Any]:
		"""
		准备Moonshot风格的部分输出消息
		
		Args:
			prefix: 文本前缀
			role: 消息角色
			name: 可选的角色名称
			
		Returns:
			格式化的消息字典
		"""
		message = {
			"role": role,
			"content": prefix,
			"partial": True  # Moonshot API使用partial=True表示部分输出
		}
		
		# 添加可选的name字段
		if name:
			message["name"] = name
			
		return message
